package com.he.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.he.domain.dto.ConditionDTO;
import com.he.domain.vo.*;
import com.he.entity.Comment;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author He
 * @version 1.0
 * @Date 2023/9/23 15:19
 * @Desc 评论mapper
 */
@Repository
public interface CommentMapper extends BaseMapper<Comment> {



    /**
     * 查询每条父评论下的前三条子评论
     *
     * @param parentCommentIdList 父评论id集合
     * @return 回复集合
     */
    List<ReplyVO> selectReplyByParentIdList(@Param("parentCommentIdList") List<Integer> parentCommentIdList);

    /**
     * 分页查询父评论
     *
     * @param limit     分页
     * @param size      大小
     * @param condition 条件
     * @return 评论集合
     */
    List<CommentVO> selectParentComment(@Param("limit") Long limit, @Param("size") Long size, @Param("condition") ConditionDTO condition);

    /**
     * 查询父评论下的子评论
     *
     * @param limit     页码
     * @param size      大小
     * @param commentId 父评论id
     * @return 回复评论集合
     */
    List<ReplyVO> selectReplyByParentId(@Param("limit") Long limit, @Param("size") Long size, @Param("commentId") Integer commentId);


    /**
     * 根据父评论id查询子评论数量
     *
     * @param parentCommentIdList 父评论id集合
     * @return 子评论数量
     */
    List<ReplyCountVO> selectReplyCountByParentId(List<Integer> parentCommentIdList);


    /**
     * 根据父评论id查询子评论id,
     * 用于校验用户回复时候输入的replayId
     *是否是该父评论下的子评论，校验之前另外需要加上parentId在List中
     *
     * @param parentId 父评论id
     * @return 子评论id列表
     */
    List<Integer> selectCommentIdByParentId(@Param("parentId") Integer parentId);

    /**
     * 查询评论数量
     *
     * @param condition 条件
     * @return 评论数量
     */
    Long countComment(@Param("condition") ConditionDTO condition);

    /**
     * 查询后台评论列表
     *
     * @param limit     分页
     * @param size      大小
     * @param condition 条件
     * @return 评论集合
     */
    List<CommentBackVO> listCommentBackVO(Long limit, Long size, ConditionDTO condition);

    List<RecentCommentVO> selectRecentComment();

    List<RecentCommentVO> selectArticleRecentComment(@Param("typeId") Integer typeId);
}
